/*****************************
 *  -----------------------  *
 * DRobot (Take the Control) *
 *  -----------------------  *
 *****************************/
package com.drobot.screen;

import java.awt.image.BufferedImage;

/**
 * 
 * Objeto que representa una region de la pantalla, compuesta por:
 * <ul>
 * <li>La distancia <b>left</b>, medida desde el extremo izquierdo de la pantalla, hasta el extremo izquierdo del
 * rectangulo.</li>
 * <li>La distancia <b>top</b>, medida desde el extremo superior de la pantalla, hasta el extremo superior del
 * rectangulo.</li>
 * <li>La distancia <b>right</b>, medida desde el extremo izquierdo de la pantalla, hasta el extremo derecho del
 * rectangulo.</li>
 * <li>La distancia <b>bottom</b>, medida desde el extremo superior de la pantalla, hasta el extremo inferior del
 * rectangulo.</li>
 * <li>El <b>checksum</b> del rectangulo.</li>
 * </ul>
 * 
 * @author Juan Horno
 * 
 */
public class PixelChecksum {

	public int left;
	public int top;
	public int right;
	public int bottom;
	public int checksum;

	public PixelChecksum() {
		this(0, 0, 0, 0, 0);
	}

	public PixelChecksum(Pixel leftTop, Pixel rightBottom, int checksum) {
		this(leftTop.x, leftTop.y, rightBottom.x, rightBottom.y, checksum);
	}

	public PixelChecksum(Pixel leftTop, Pixel rightBottom, BufferedImage image) {
		this(leftTop.x, leftTop.y, rightBottom.x, rightBottom.y, image);
	}

	public PixelChecksum(int left, int top, int right, int bottom, int checksum) {
		this.left = left;
		this.top = top;
		this.right = right;
		this.bottom = bottom;
		this.checksum = checksum;
	}

	public PixelChecksum(int left, int top, int right, int bottom, BufferedImage image) {
		this.left = left;
		this.top = top;
		this.right = right;
		this.bottom = bottom;
		for (int x = left; x < right; x++) {
			for (int y = top; y < bottom; y++) {
				this.checksum = this.checksum + image.getRGB(x, y);
			}
		}
	}

	/**
	 * Compara el color de dos regiones, devolviendo <b>true</b> si tienen exactamente el checksum.
	 * 
	 * @param pixelChecksum
	 *            La region con la que se quiere comparar.
	 * 
	 * */
	@Override
	public boolean equals(Object pixelChecksum) {
		PixelChecksum other = (PixelChecksum) pixelChecksum;
		if (checksum == other.checksum) {
			return true;
		}
		return false;
	}

	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append("C[" + left + "," + top + "," + right + "," + bottom + "," + checksum + "]");
		return sb.toString();
	}
}
